package searchStudy;

public class SearchRange {

    /**
     * LeetCode T34 在排序数组中查找元素的第一个和最后一个位置
     *
     * 给定一个按照升序排列的整数数组 nums，和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
     *
     * 如果数组中不存在目标值 target，返回 [-1, -1]。
     *
     * @param args
     */
    public static void main(String[] args) {

    }

    public int[] searchRange(int[] nums, int target) {
        int leftIndex = binarySearch(nums, target, true);
        int rightIndex = binarySearch(nums, target, false);
        if (leftIndex == nums.length || nums[leftIndex] != target){
            return new int[]{-1, -1};
        }
        return new int[]{leftIndex, rightIndex - 1};
    }
    //二分搜索查找第一个大于等于目标值的坐标和第一个大于目标值的坐标
    public int binarySearch(int[] nums, int target, boolean flag){
        int low = 0;
        int high = nums.length - 1;
        int ans = nums.length;
        while (low <= high){
            int mid = (low + high)/2;
            if (nums[mid] > target || (flag && nums[mid] >= target)){
                high = mid - 1;
                ans = mid;
            } else {
                low = mid + 1;
            }
        }
        return ans;
    }

}
